package com.test01.BigDecimal;

import java.math.BigDecimal;

import org.junit.Test;

/*
 * 总结：
 *    1.提供了加减乘除的工具类方法，加减乘的结果小数点都是可知的，不会出现循环小数，所以不需要设置小数点位数。
 *    2.除法有可能出现循环小数，所以这里设定小数点位数
 */
public class Deci {
	// 进行加法运算
	public static double add(double d1, double d2) {
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return b1.add(b2).doubleValue();
	}

	// 进行减法运算
	public static double sub(double d1, double d2) {
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return b1.subtract(b2).doubleValue();
	}

	// 进行乘法运算
	public static double mul(double d1, double d2) {
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		BigDecimal bigDecimal = new BigDecimal(0.001);
		return b1.multiply(b2).doubleValue();
	}
	// 进行除法运算
	public static double div(double d1, double d2, int len) {
		BigDecimal b1 = new BigDecimal(d1);
		BigDecimal b2 = new BigDecimal(d2);
		return b1.divide(b2, len, BigDecimal.ROUND_HALF_UP).doubleValue();
	}

	public static void main(String[] args) {
		double div = add(2.5555555555, 3.555555555555);
		System.out.println(div);

		div = sub(2.5555555555, 3.555555555555);
		System.out.println(div);

		div = mul(2.5555555555, 3.555555555555);
		System.out.println(div);

		div = sub(2.5555555555, 3.555555555555);
		System.out.println(div);
		
//		直接输出完整的BigDecimal对象中的值。就会证实0.001在计算机中并不是真正的0.001，而且一个浮点值。
		System.out.println(new BigDecimal(0.001).multiply(new BigDecimal(1000)));
	}
	
}
